/**Permet de creer des nouvelles livraisons
 * Permet d'ajouter une livraison a la liste de livraisons
 * Permet de joindre une livraison et une commande
 */

package livraison;

import java.util.Vector;

import Usager.Livreur;
import restaurant.Adresse;
import carnetCommandes.Commande;
import carnetCommandes.Registre;

public class ControleurLivraison {

	private static ControleurLivraison instance = null;	

	private Trajet trajetLivraison = new Trajet();
	
	private Registre registre;
	
	private Livreur livreur;

	
	/**
	 * creer et ajoute une livraison au carnetLivraison
	 * 
	 * @param livreur
	 * @param commande
	 * @param adresseClient
	 * @param adresseRestaurant
	 */
	/**public void creerLivraison(Livreur livreur,Adresse adresseClient, Adresse adresseRestaurant,Commande commande){
		Livraison l = new Livraison(livreur.getProfil().getAdresse(), adresseClient, adresseRestaurant,commande);
		l.setDate();
		livreur.getCarnetLivraison().addLivraison(l);
	
	}*/
	
	// Constructeur prive
	private ControleurLivraison(){
		registre = Registre.getInstance();
	}
	
	// Constructeur parametre
	public void creerLivraison(Commande commande){
		
		registre = Registre.getInstance();
		livreur = (Livreur) registre.getCompteActif();
		
		Livraison livraison = new Livraison(livreur.getProfil().getAdresse(),commande.getProfilClient().getAdresse(),
											commande.getAdresseRestaurant(), commande);
		livraison.setDate();
		livreur.getCarnetLivraison().addLivraison(livraison);
		
		commande.setConfirmerParLivreur();
		
	}
	
	public static ControleurLivraison getInstance(){
	
	if (instance == null) instance = new ControleurLivraison();
	
	return instance;
	}

	
	/**
	 * Supprime la livraison du CarnetLivraison
	 * 
	 * @param le livreur � qui appartient le carnet
	 * @param la livraison a supprimer
	 */
	public void supprimerLivraison(Livreur livreur, Livraison livraison){
		
		try {
			livreur.getCarnetLivraison().deleteLivraison(livraison);
		} catch (Exception e) {		
			e.printStackTrace();
		}
	}
	
	public void getLivraison(Livreur livreur, Livraison livraison){
		
		try {
			livreur.getCarnetLivraison().getLivraison(livraison);
		} catch (Exception e) {		
			e.printStackTrace();
		}
	}
	
	public void getLivraison(Livreur livreur, int i){
		
		try {
			livreur.getCarnetLivraison().getLivraison(i);
		} catch (Exception e) {		
			e.printStackTrace();
		}
	}
	
	/**
	 * Supprime la livraison du CarnetLivraison
	 * 
	 * @param le livreur � qui appartient le carnet
	 * @param l'index de la livraison a supprimer
	 */
	public void supprimerLivraison(Livreur livreur,int index){
		
		try {
			livreur.getCarnetLivraison().deleteLivraison(index);
		} catch (Exception e) {		
			e.printStackTrace();
		}
	}
	
	public void setEmplacementLivreur(String rue, String ville, String codePostal){
		Livreur livreur = (Livreur) Registre.getInstance().getCompteActif();
		livreur.setEmplacement(new Adresse(rue, ville, codePostal));
	}
	

	public Adresse getEmplacementLivreur(){
		return ((Livreur)(Registre.getInstance().getCompteActif())).getEmplacement();
	}

	public void creerTrajet(int positionCommande){
		 
		/*try{
		 Registre registre = Registre.getInstance();
		 Livreur livreur = (Livreur)registre.getCompteActif();
		 Commande commande = registre.getListeCommandeConfirmee().get(positionCommande);
		 //Commande  commande = registre.getCommande(positionCommande);
		
		 
		 String adrlivreur = livreur.getEmplacement().toStringMap();
		 
		 String adrClient = commande.getProfilClient().getAdresse().toStringMap();
		 
		Vector<Adresse> vectTmp = <Adresse>commande.getAdresseRestaurant();
		String adrRestau[] = new String[vectTmp.size()];
		for(int i=0; i < vectTmp.size(); i++){
			adrRestau[i] = vectTmp.get(i).toStringMap();
		}
		 
		 trajetLivraison.setUrlMap(adrlivreur, adrClient, adrRestau);
		}
		catch(Exception e){
			System.out.print(e.getMessage());
		}*/
		
	}
	
	public Trajet getTrajetLivraison(){
		return trajetLivraison;
	}
	
	public Vector <Livraison> getCarnetLivreur(){
		livreur = (Livreur) registre.getCompteActif();
		
		return livreur.getCarnetLivraison().getCarnetLivraison();
	}
	

}
